#include <iostream>
#include <cstdio>
#include <string>
#include <vector>
#include <cmath>
#include <algorithm>

using namespace std;

double eps=1e-15;
class Point
{
	public:
	double x,y,z;
	Point(double a=0,double b=0,double c=0)
	{
		x=a,y=b,z=c;
	}
	Point mid(Point pb)
	{
		return Point((x+pb.x)/2,(y+pb.y)/2,(z+pb.z)/2);
	}
	bool equal(Point pb)
	{
		if(fabs(x-pb.x)>eps||fabs(y-pb.y)>eps||fabs(z-pb.z)>eps) return false;
		return true;
	}
	double length(Point pb)
	{
		double lx=fabs(x-pb.x),ly=fabs(y-pb.y),lz=fabs(z-pb.z);
		return sqrt(lx*lx+ly*ly+lz*lz);
	}
};
Point p[10010];
double pastTime[10010];
Point binary(Point pa,Point pb,Point pp,double vs,double vp,double pst)
{
	Point low=pa,high=pb,st=pa,mid;
	double ls,lp,ts,tp;
	//bool f
	while(!low.equal(high))
	{
		mid=low.mid(high);
		//printf("low: %.9f %.9f %.9f\n",mid.x,mid.y,mid.z);
		ls=st.length(mid)+pst;
		lp=pp.length(mid);
		ts=ls/vs,tp=lp/vp;
		//printf("ls=%f lp=%f ts=%f tp=%f\n",ls,lp,ts,tp);
		if(fabs(ts-tp)<1e-12) return mid;
		else if(ts<tp) low=mid;
		else high=mid;
	}
	return Point(100000,0,0);
}
int main()
{
	int n;
	double vs,vp;
	Point pp;
	pastTime[0]=0;
	while(cin>>n)
	{
		Point pt;
		bool yn=false;
		for(int i=0;i<n+1;i++) cin>>p[i].x>>p[i].y>>p[i].z;
		cin>>vp>>vs;
		cin>>pp.x>>pp.y>>pp.z;
		for(int i=0;i<n;i++)
		{
			pastTime[i+1]=pastTime[i]+p[i].length(p[i+1]);
			pt=binary(p[i],p[i+1],pp,vs,vp,pastTime[i]);
			if(pt.x<10010)
			{
				yn=true;
				break;
			}
		}
		if(yn)
		{
			puts("YES");
			printf("%.7f\n",pp.length(pt)/vp);
			printf("%.6f %.6f %.6f\n",pt.x,pt.y,pt.z);
		}
		else puts("NO");
	}
	return 0;
}
/*
4
0 0 0
0 10 0
10 10 0
10 0 0
0 0 0
1 1
5 5 25

4
0 0 0
0 10 0
10 10 0
10 0 0
0 0 0
1 1
5 5 50

1
1 2 3
4 5 6
20 10
1 2 3

1
0 0 1
0 0 2
0.3 0.3
0 0 3
*/
